package net.similarsu.device.sdk.dah.struct;

import com.sun.jna.Pointer;
import com.sun.jna.Structure;

import static net.similarsu.device.sdk.dah.library.DahLibrary.*;

@Structure.FieldOrder({
        "nChannelID"
        ,"szName"
        ,"bReserved1"
        ,"PTS"
        ,"UTC"
        ,"nEventID"
        ,"stuObject"
        ,"stuFileInfo"
        ,"emEventType"
        ,"bStatus"
        ,"emCardType"
        ,"emOpenMethod"
        ,"szCardNo"
        ,"szPwd"
        ,"szReaderID"
        ,"szUserID"
        ,"szSnapURL"
        ,"nErrorCode"
        ,"nPunchingRecNo"
        ,"nNumbers"
        ,"byImageIndex"
        ,"byReserved"
        ,"dwSnapFlagMask"
        ,"emAttendanceState"
        ,"szClassNumber"
        ,"szPhoneNumber"
        ,"szCardName"
        ,"uSimilarity"
//        ,"stuImageInfo"
//        ,"nImageInfoCount"
//        ,"szCitizenIDNo"
//        ,"nGroupID"
//        ,"nCompanionCardCount"
//        ,"szCompanionCards"
        ,"bReserved"
})
public class DEV_EVENT_ACCESS_CTL_INFO extends Structure {
    public int nChannelID;                         // 门通道号
    public byte[] szName = new byte[DH_EVENT_NAME_LEN];          // 事件名称
    public byte[] bReserved1 = new byte[4];                      // 字节对齐
    public double PTS;                                // 时间戳(单位是毫秒)
    public NET_TIME_EX UTC;                                // 事件发生的时间
    public int nEventID;                           // 事件ID
    public DH_MSG_OBJECT stuObject;                          // 检测到的物体
    public DH_EVENT_FILE_INFO stuFileInfo;                        // 事件对应文件信息
    public int emEventType;                        // 门禁事件类型
    public int bStatus;                            // 刷卡结果,TRUE表示成功,FALSE表示失败
    public int emCardType;                         // 卡类型
    public int emOpenMethod;                       // 开门方式
    public byte[] szCardNo = new byte[DH_MAX_CARDNO_LEN];        // 卡号
    public byte[] szPwd = new byte[DH_MAX_CARDPWD_LEN];          // 密码
    public byte[] szReaderID = new byte[DH_COMMON_STRING_32];    // 门读卡器ID
    public byte[] szUserID = new byte[DH_COMMON_STRING_64];      // 开门用户
    public byte[] szSnapURL = new byte[DH_COMMON_STRING_128];    // 抓拍照片存储地址
    public int nErrorCode;                         // 开门失败的原因,仅在bStatus为FALSE时有效
    // 0x00 没有错误
    // 0x10 未授权
    // 0x11 卡挂失或注销
    // 0x12 没有该门权限
    // 0x13 开门模式错误
    // 0x14 有效期错误
    // 0x15 防反潜模式
    // 0x16 胁迫报警未打开
    // 0x17 门常闭状态
    // 0x18 AB互锁状态
    // 0x19 巡逻卡
    // 0x1A 设备处于闯入报警状态
    // 0x20 时间段错误
    // 0x21 假期内开门时间段错误
    // 0x30 需要先验证有首卡权限的卡片
    // 0x40 卡片正确,输入密码错误
    // 0x41 卡片正确,输入密码超时
    // 0x42 卡片正确,输入指纹错误
    // 0x43 卡片正确,输入指纹超时
    // 0x44 指纹正确,输入密码错误
    // 0x45 指纹正确,输入密码超时
    // 0x50 组合开门顺序错误
    // 0x51 组合开门需要继续验证
    // 0x60 验证通过,控制台未授权
    // 0x61 卡片正确,人脸错误
    // 0x62 卡片正确,人脸超时
    // 0x63 重复进入
    public int nPunchingRecNo;                     // 刷卡记录集中的记录编号
    public int nNumbers;                            // 抓图张数
    public byte byImageIndex;                        // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
    public byte[] byReserved = new byte[3];                      // 字节对齐
    public int dwSnapFlagMask;                        // 抓图标志(按位),具体见 NET_RESERVED_COMMON
    public int emAttendanceState;                  // 考勤状态
    public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN];    // 班级（考勤肯尼亚定制）
    public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN];        // 电话（考勤肯尼亚定制）
    public byte[] szCardName = new byte[DH_MAX_CARDNAME_LEN];            // 卡命名
    public int uSimilarity;                         // 人脸识别相似度,范围为0~100
//    public DEV_ACCESS_CTL_IMAGE_INFO[] stuImageInfo = (DEV_ACCESS_CTL_IMAGE_INFO[]) new DEV_ACCESS_CTL_IMAGE_INFO().toArray(6);     // 图片信息
//    public int nImageInfoCount;                                        // 图片信息数量
//    public byte[] szCitizenIDNo = new byte[20];                            // 身份证号
//    public int nGroupID;                                                // 事件组ID
//    public int nCompanionCardCount;                                    // 陪同者卡号个数
//    public COMPANION_CARD[] szCompanionCards = (COMPANION_CARD[]) new COMPANION_CARD().toArray(MAX_COMPANION_CARD_NUM);    // 陪同者卡号信息
    public byte[] bReserved = new byte[904];

    public DEV_EVENT_ACCESS_CTL_INFO() {
        super();
    }

    public DEV_EVENT_ACCESS_CTL_INFO(Pointer pointer) {
        super(pointer);
    }

    public static class ByReference extends DEV_EVENT_ACCESS_CTL_INFO implements Structure.ByReference {
    }

    ;

    public static class ByValue extends DEV_EVENT_ACCESS_CTL_INFO implements Structure.ByValue {
    }

    ;
}
